1
การจัดการความแม่นยำและการป้องกันการล้นข้อมูล
AI018Lesson 3
00:00

ใน NumPy, การจัดการความแม่นยำ คือการเลือกขนาดบิตอย่างตั้งใจเพื่อสมดุลระหว่างประสิทธิภาพหน่วยความจำกับความถูกต้องทางตัวเลข แตกต่างจากจำนวนเต็มมาตรฐานของพีทอนที่มีความแม่นยำไม่จำกัด แต่ NumPy ใช้ชนิดข้อมูลแบบคงที่ตามภาษาซี เช่น int32_t, uint64_t)

1. ลำดับประเภทข้อมูล

dtypes ของ NumPy กำหนดขนาดหน่วยความจำ ขณะที่ np.int_() ให้ขนาดขึ้นอยู่กับแพลตฟอร์ม ระบบที่มั่นคงควรพึ่งพา ชื่อเรียกประเภทข้อมูลขนาดคงที่ (ตาราง: หน้า 34) เพื่อให้แน่ใจว่ามีความสอดคล้องกันในฮาร์ดแวร์ทุกชนิด

  • จำนวนเต็ม:int8_t, int16_t, int32_t, int64_t.
  • จำนวนบวก (ไม่มีเครื่องหมาย):uint8_t ถึง uint64_t.
  • ตัวชี้ (ตัวแปรชี้ตำแหน่ง):intptr_t, uintptr_t.

2. เครื่องมือสำหรับตรวจสอบข้อมูล

ก่อนดำเนินการคำนวณ ให้ใช้ np.iinfo() และ np.finfo() เพื่อตรวจสอบขอบเขต ตัวอย่างเช่น 1 + np.finfo(np.longdouble).eps ระบุค่า machine epsilon — ค่าที่เป็นเกณฑ์จำกัด ที่การบวกจะไม่เปลี่ยนแปลงค่าผลลัพธ์อีกต่อไป

การล้นข้อมูลจำนวนเต็มตรรกะการกลับคืนค่ามากสุด + 1 — ค่าน้อยสุดทศนิยมตรรกะการจำกัดค่าเกินค่ามากสุด — เป็นค่าอนันต์ (inf)

3. กลไกการล้นข้อมูล

NumPy ไม่แจ้งข้อผิดพลาดเมื่อเกิดการล้นข้อมูล แต่จะล้มเหลวโดยเงียบ ใช้ np.power(100, 8, dtype=np.int32) จะทำให้เกิดการตัดทอน ขณะที่ float64 จะเปลี่ยนไปเป็น infใช้ np.issubdtype(d, np.floating) เพื่อตรวจสอบหมวดหมู่ก่อนดำเนินการ

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>